﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Babelfish.MetaData;

namespace Babelfish
{
    /// <summary>
    /// Class representing an Empty INode
    /// </summary>
    public class EmptyNode : INode
    {
        #region INode Members

        /// <summary>
        /// Gets the name of this node. will always be string.empty
        /// </summary>
        /// <value>The name.</value>
        public string Name
        {
            get { return string.Empty; }
        }

        /// <summary>
        /// Gets the value of this node. will always be string.empty
        /// </summary>
        /// <value>The value.</value>
        public string Text
        {
            get { return string.Empty; }
        }

        /// <summary>
        /// Gets the metadata of this node, like html or xml comments. will always be empty
        /// </summary>
        /// <value></value>
        public MetaDataCollection MetaData
        {
            get { return new MetaDataCollection(); }
        }

        /// <summary>
        /// Gets a value indicating whether this node has a value. will always be false
        /// </summary>
        /// <value><c>true</c> if this node has a value; otherwise, <c>false</c>.</value>
        public bool HasValue
        {
            get { return false; }
        }

        /// <summary>
        /// Gets the parent node of this node. Will allways be null
        /// </summary>
        /// <value>The parent node.</value>
        public INode Parent
        { 
            get { return null; } 
        }

        /// <summary>
        /// Gets the siblings of this node. Will allways be empty
        /// </summary>
        /// <value>The sibling nodes.</value>
        public NodeCollection Siblings
        {
            get { return new NodeCollection(); }
        }

        /// <summary>
        /// Gets the child nodes of this node. Will Allways be empty
        /// </summary>
        /// <value>The child nodes.</value>
        public NodeCollection ChildNodes
        {
            get { return new NodeCollection(); }
        }

        /// <summary>
        /// Gets the attributes of this node. Will allways be empty
        /// </summary>
        /// <value>The attributes.</value>
        public AttributeCollection Attributes
        {
            get { return new AttributeCollection(); }
        }

        /// <summary>
        /// Removes this this node from its parent node.
        /// </summary>
        public void Remove(INode childNode)
        {
            
        }

        #endregion
    }
}
